הטכניון מ.ט.ל. הפקולטה להנדסת חשמל המעבדה ל VLSI חוברת הדרכה על כלי SYNOPSYS הדרכה על ביצוע סימולציה וסינתזה עם Design Kit TOWER TSL 018 גואל סמואל, אמנון סטניסלבסקי התחברות ממחשבי LinuxPC זאת הדרך המומלצת לעבודה. פשוט יש לבצע login לתחילת העבודה. טרמינל באמצעות Applications System Tools Terminal ניתן לפתוח חלון : User Manual ניתן לראות את כל הדוקומנטציה של כלי Synopsys ע"י הרצת הפקודה: vcsmx: acroread /tools/synopsys34/fev/vcs_mx_vh2013.06sp1/doc/userguide/pdf/vcsmx_ug.pdf designware: acroread /tools/synopsys34/fev/syn_vi2013.12/dw/doc/datasheets/data_int_overview.pdf לפני תחילת העבודה יש לבנות את הסביבה הנכונה. העתק את קבצי האתחול: mkdir design_sim cp /users/iit/synopsys/tsl018_20034_sim/.syn* design_sim mkdir design_sim/work cd design_sim עבור לספריית design_sim ורשום קבצי ה VHDL בספריה זאת: כל הקבצים שהכלים יוצרים נכתבים ב WORK הנמצאת ב.design_sim.1 סימולציה vcsmx verilog בעזרת הסימולטור vcsmx ניתן לבצע סימולציות של,VHDL.systemverilog הכלי מאפשר ביצוע הפעולות הבאות : הצגת והשוואה של צורות גל drivers הצגת הצגת סכמות ומסלולים UCLI/Tcl ביצוע של פקודות breakpoints קביעת ביצוע סימולציה בצעד בודד ו 1.1 סימולציית VHDL הרצת הסימולציה מורכבת משלשה שלבים :,analyze elaborate והפעלת ה gui כדלקמן: vhdlan debug file1.vhd file2.vhd Analyze vcs debug_all debug cfg_design Elaborate simv gui 1
בשורה הראשונה יפורטו שמות קבצי התכנון)כל שמות הקבצים המכילים את הבלוקים ותתי הבלוקים(. פקודת ה vcs תבצע אלבורציה, יש לפרט את שם הקונפיגורציה cfg_design כפי שמופיעה בקובץ ה level top של התכנון. הערה ניתן לבצע אלבורציה גם על top_entity vcs debug_all debug top_entity Elaborate שמספק את אותות הכניסה TestBench מקובל לבצע סימולציות באמצעות רכיב עזר (testbench) לתכנון. בדוגמא הבאה, jkff הוא התכנון אותו יש לבדוק : Library IEEE; USE IEEE.std_logic_1164.ALL; entity jkff is port (clk, j, k :in std_logic; q, qn :inout std_logic); end jkff; architecture arc_jkff of jkff is signal q_tmp, qn_tmp : std_logic; begin process(j, k, clk) begin if (j = '0') then if (k = '0') then q_tmp <= q; qn_tmp <= qn; else q_tmp <= '0'; qn_tmp <= '1'; end if; elsif (k = '0') then q_tmp <= '1'; qn_tmp <= '0'; else q_tmp<= qn; qn_tmp<= q; end if; end process; process begin wait until clk'event and clk = '1' ; q <= q_tmp; qn <= qn_tmp; end process; end arc_jkff; configuration cfg_jkff of jkff is for arc_jkff end for; end cfg_jkff; 2
jk_test מספק אותות כניסה ל jkff ו jk_test_topמחבר ביניהם : library IEEE; use IEEE.std_logic_1164.all; entity jk_test is PORT (j, k : OUT STD_LOGIC; clk : INOUT STD_LOGIC); end jk_test; architecture arc_jk_test of jk_test is begin PROCESS BEGIN WAIT FOR 5 ns; IF clk='0' THEN clk <= '1'; ELSE clk <= '0'; END IF; END PROCESS; PROCESS BEGIN WAIT FOR 20 ns; j <= '0'; k <= '1'; WAIT FOR 40 ns; j <= '1'; k <= '0'; WAIT FOR 40 ns; k <= '1'; WAIT FOR 40 ns; j <= '0'; k <= '0'; WAIT FOR 60 ns; END PROCESS; end arc_jk_test; configuration cfg_jk_test of jk_test is for arc_jk_test end for; end cfg_jk_test; library IEEE; use IEEE.std_logic_1164.all; entity jk_test_top is PORT (q, qn : INOUT STD_LOGIC); end jk_test_top; architecture arc_jk_test_top of jk_test_top is SIGNAL clk, j, k : STD_LOGIC; COMPONENT jk_test PORT (j, k : OUT STD_LOGIC; clk : INOUT STD_LOGIC); END COMPONENT; COMPONENT jkff PORT (clk, j, k : IN STD_LOGIC; q, qn : INOUT STD_LOGIC); END COMPONENT; BEGIN u1 : jk_test PORT MAP(j, k, clk); u2 : jkff PORT MAP(clk, j, k, q, qn); end arc_jk_test_top; configuration cfg_jk_test_top of jk_test_top is FOR arc_jk_test_top FOR u1 : jk_test USE ENTITY WORK.jk_test(arc_jk_test); END FOR; FOR u2 : jkff USE ENTITY WORK.jkff(arc_jkff); END FOR; END FOR; end cfg_jk_test_top; 3
תיאור הממשק הגרפי קליק כפול על שם של בלוק או תת בלוק יציג את רשימת הסיגנלים, הכניסות והיציאות שלו. להצגת צורת גל יש לבחור את הסיגנל וללחוץ על הכפתור הימני של העכבר לבחור: )recent או new( Add To Wave להרצת הסימולציה בחלון ה wave יש לבחור את יחידות הזמן הרצויות בצד שמאל הוא ב ps. בחלונית מתחת ניתן, ה default למעלה. יש ללחוץ על החץ להרצה. כמו כן ניתן לבחור את זמן הריצה, לרשום run N בשורת הפקודה כאשר N מסמן את מספר יחידות הזמן שברצונך להריץ.. ניתן לבצע zoom באמצעות לחצני File שומר מצב הריצה. ניתן לשחזר אותה עם FileSave Session.Load Session בחירת שם בתת החלון הימני יאפשר ביצוע מספר גדול של מפעולות שיכולים לסייע לסימולציה. מספר דוגמאות : Show schematic o Show Path Schematics o Trace Drivers o Trace Loads o Follow Signal o Annotate Values מציג את הערכי הסיגנלים על הקוד o ועוד... o 4
Verilog 1.1 סימולציית,analyze בדומה ל VHDL גם במקרה זה הרצת הסימולציה מורכבת משלשה שלבים : elaborate ופעלת ה gui כדלקמן: vlogan debug file1.v file2.v Analyze vcs debug_all debug top_module Elaborate simv gui בשורה הראשונה יפורטו שמות קבצי התכנון)כל שמות הקבצים המכילים את הבלוקים ותתי הבלוקים(. פקודת ה vcs תבצע אלבורציה, יש לפרט את שם ה top_module כפי שמופיעה בקובץ ה level top של התכנון. יש להוסיף +v2k לשורת vlogan במידה וקוד ה Verilog נכתב בתקן 1002. )עבור עבודה עם 46 ביט יש לפנות לצוות המעבדה(. במידה והקוד הוא כולו,Verilog ניתן להריץ את שלשת השלבים ביחד בעזרת הפקודה הבאה: vcs R gui full64 debug_all design.v הסבר על הממשק הגרפי מופיע בסעיף הקודם. Testbench גם ב verilog מקובל לבצע סימולציות באמצעות רכיב עזר (testbench) שמספק את אותות הכניסה לתכנון. בדוגמא הבאה, flop הוא התכנון אותו יש לבדוק : module flop_test; reg data, clock; flop f1 (clock, data, qa, qb); initial begin clock = 0; data = 0; #10000 $finish; end always #100 clock = ~clock; always #300 data = ~data; endmodule module flop (clock, data, qa, qb); input clock,data; output qa, qb; nand #10 nd1 (a, data, clock), nd2 (b, ndata,clock), nd3 (qa, a, qb), nd4 (qb, b,qa); mynot nt1 (ndata, data); endmodule module mynot (out, in); output out; input in; not(out,in); endmodule ניתן להפעיל את הסימולציה באמצעות הפקודה : vcs R gui debug_all flop_test.v flop.v 1.1 סימולציית SystemVerilog עבור שפת SystemVerilog יש להוסיף את האופציה sverilog לפקודה הקומפילציה. 1.1 סימולציה מעורבת 5
ניתן לבצע סימולציות המערבות קוד VHDL ו verilog. ראשית מבצעים vlogan או vhdlan לכל הקבצים בהתאם לשפה. לאחר מכן, אם ה top_level הוא Verilog יש להשתמש בפקודה vcs הבאה : vcs debug_all debug top_module ואם ה top_level הוא VHDL יש להשתמש בפקודה vcs הבאה : vcs debug_all debug cfg_design.2 סינתזה vision Design חשוב : עליך לבקש מאחראי המעבדה גישה לקבצי tower לפני תחילת הסינתזה. להכנת סביבת הסינתזה יש ליצור ספרייה חדשה בשם design_syn בעזרת הפקודה הבאה: mkdir design_syn cp /users/iit/synopsys/tsl018_20034_syn/.syn* design_syn mkdir design_syn/work עליך להפעיל את כלי הסינתזה מתוך ספריה זאת. קבצים המיוצרים על ידי הכלי מאוחסנים בספרייה ששמה WORK שנוצרת בתוך.design_syn לאחר יצירת הספרייה עבור אליה עם : cd design_syn ה Compiler Design )או Design Vision בגרסתו הגרפית( הוא כלי הסינתזה של חברת.Synopsys הכלי מקבל כקלט תאור VHDL )או )Verilog ויוצר כפלט מעגל ברמת השערים המממש את ה.VHDL הכלי מופעל באמצעות הפקודה design_vision שגורם לפתיחה של חלון גרפי המאפשר הרצת פקודות מתוך תפריטים. כל פקודה שנריץ בעזרת הממשק הגרפי תופיע גם בחלון ה terminal ממנו הרצנו את הכלי. נוכל להריץ גם פקודות על ידי כתיבתם בחלון ה terminal. נוכל גם לרשום את כל הפקודות בקובץ אחד )כל פקודה בשורה נפרדת( ולהריץ את כל הקובץ בבת אחת על ידי File Execute Script ניתן לקבל את קובץ כל הפקודות שהרצנו ע"י File Save Info Design Setup :help בצד ימין של התפריט הראשי, מופיע כפתור הפקודות וכל המשתנים של.design_vision.help בעזרתו ניתן לקבל הסברים של כל *שילוב זיכרונות RAM )חלק א'( את השלב הבא יש לבצע במידה וזיכרונות ה RAM של הפרויקט נוצרו באמצעות הכלי של tower ובאמצעות המדריך Using Tower 0.18u RAM memories המופיע באתר. במידה ויש לכם זיכרונות אחרים ניתן לדלג על שלב זה. עבור Module ה RAM לא תתבצע סינתזה. יש ליצור קובץ בשם mem.v למשל המכיל הגדרה ריקה של הזיכרון לדוגמא : module mymem ( A, CEB, WEB, OEB, CSB, I, O); input [7:0] A ; input CEB ; input WEB ; input OEB ; input CSB ; input [31:0] I ; output [31:0] O ; 6
endmodule כאשר mymem הוא שם הזיכרון. ניתן להעתיק את המודול מקובץ ה Verilog )או )VHDL שבו השתמשת בסימולציה. סינתזה שלבי הביצוע: 2( קריאת קבצי ה VHDL/verilog ובדיקתם לשגיאות.syntax לחץ על File Analyze בחלון שנפתח יש ללחוץ add בחלון שנפתח יש לבחור את כל קבצי התכנון )כולל קובץ הזיכרון( וללחוץ.OK יש לחזור על פעולות אלו עד שנקרא את כל קבצי התכנון )אין חשיבות לסדר בו קוראים את הקבצים(. קישור (link) של הקבצים ומיפויים לשערים לוגים )סינתזה ללא תלות בטכנולוגיה(. לחץ על,File Elaborate בחלון שנפתח בחר את ה top level )התכנון הראשי שמכיל את שאר התכנונים(, סמן ב V את הריבוע Reanalyze outofdate libraries ולחץ על.OK בתום שלב זה יופיע שם התכנון שבחרנו וכל היחידות אותו הוא מכיל בחלון ה.logical hierarchy על ידי לחיצה על הכפתור הימני על שם התכנון יפתח תפריט בו ניתן לבחור לראות את הסכמה שנוצרה ע"י schematic view ולראות את תכונות היחידה על ידי.Properties )חלון זה מכיל מידע על היחידה ואפשר דרכו לסמן אותה כ dont )touch אם קיים זיכרון, יש לבצע עם את הפעולות הבאות : read_lib memory_typ.lib write_lib memory_typ format db כאשר memory_typ.lib הוא קובץ ה *.lib של הזיכרון. אופטימיזציה ומיפוי לשערי ספרייה )סינתזה תלוית טכנולוגיה(. לפני ביצוע שלב זה יש להגדיר את אילוצי התכנון )אופציונאלי ראה "הגדרת אילוצים"( על ידי האפשרויות השונות שבתפריט ה attributes או על ידי קריאת קובץ אילוצים בעזרת.File Execute Script )דלג על שלב זה אם אין ברשותך אילוצים.( כמו כן ניתן לבצע בדיקה של התכנון בשלב זה ולאתר תקלות באמצעות.Design Check Design בדוק שבחלון הקטן למעלה מופיע שם היחידה העליונה. לחץ על Design Compile.Design בחלון שנפתח ניתן לבחור את כמות העבודה שהכלי ישקיע בכל שלב על ידי שינוי הבחירה באפשרויות ה,effort השארת האפשרויות הבסיסיות מאפשרת קבלת תוצאות טובות, לסיום לחץ.OK במידה ותהליך הסינתזה הסתיים כראוי, כל הרכיבים יופיעו עם סימן and אפור )מלא(. ניתן לראות schematic של תא ספציפי על ידי לחיצה על שמו ומקש ימני בעכבר:,Schematic view לצפייה במעגל כולו יש לבצע זאת על ה.Top cell )1 )3 )6 5( חשוב : כעת עליך לבצע בדיקה של התכנון כדי לאתר תקלות באמצעות.Design Check Design עליך לעבור בקפידה על הפלט של הפקודה. חשוב לקרוא את כל ה warnings ולתקן את כל התקלות בתכנון. הערה : ניתן לשמור את הפלט של ה design_vision בקובץ ע"י בחירת as save content שמופיע בתפריט options בצד ימיני התחתון של החלון כדי להקל מציאת ה.warnings שמירת התוצאות לחץ על File Save ובחר בשדה Format את הפורמט הרצוי. וודא כי.Save מסומן ולחץ hierarchy הגדרת אילוצים Save All designs in 7
ניתן להגדיר מגבלות/אילוצי אופטימיזציה על תהליך הסינתזה, כמו הגבלות זמן על המסלול הארוך ביותר, קביעת שעון למעגל, שטח התכנון וכד', הכלי יסנתז את התכנון בהתאם לאילוצים אלו. את האילוצים ניתן לכתוב בקובץ סקריפט יעודי עם סיומת.tcl יש להריץ את הסקריפט לאחר שלב הטעינה ולפני שלב הסינתזה באמצעות.File Execute script פקודה להגדרת שעון, דוגמא : create_clock name "CLK" period 50 waveform {0 25} clock create_clock מגדירה אות שעון על ההדק CLK בעל מחזור,50ns המתחיל ב 0 ועולה ל 2 בזמן.25ns set_max_delay קובע אילוץ של השהיה המרבית בין צמתים שונים במעגל. דוגמא : set_max_delay 10 to D[*] הכלי ינסה לבנות מעגל כך שההשהיה בין כל צומת במעגל לצמתים ששמם מתאים ל [*]D לא תעלה על.10ns אין ודאות שהכלי יצליח לסנתז מעגל כזה. set_max_area קובע אילוץ לגבי השטח הכולל של המעגל. set_input_delay מאפשר למשתמש להגדיר מתי )ביחס לעליית השעון( אותות הכניסה מוכנים. set_output_delay מאפשר למשתמש להגדיר מתי )ביחס לעליית השעון( אותות היציאה צריכים להיות מוכנים. set_dont_touch block_name מורה לכלי לא לסנתז בלוק מסוים. balance_registers מאזן את ההשהיות בכל דרגות הצינור. האיזון מתקבל ע"י הזזה אוטומטית של לוגיקה קומבינטורית משלבים עמוסים של ה pipe לשלבים פחות עמוסים תוך כדי שמירה על הנכונות הלוגית. הפקת דוחות מסלול קריטי:,Timing Report Timing Path לחץ.OK בתחילת הדו"ח שנוצר ניתן לראות פרטים על הטכנולוגיה שבה נעשה השימוש, בטבלה ניתן לראות את זמני ההשהיה של כל תא )ב ns ( סה"כ הזמן עבור המסלול הקריטי מופיע בתחתית הדוח ב time data arrival )ב ns (, במידה והוגדרו אילוצים על זמן קריטי/מקסימלי תופיע שורה המציינת אם התכנון עמד באילוץ met/violated) :(slack שטח : באמצעות,Design Report area לחץ.OK בדו"ח ניתן לראות את השטח שמאוכלס על ידי הלוגיקה הצרופית ושאינה צרופית והרשת )חוטים(, היחידות הן 0.5 מיקרומטר בריבוע. צריכת הספק : באמצעות Design Report power שימוש ברכיבי DesignWare 8
(DW) DesignWare היא ערכה של.Synopsys ערכה זו מכילה מימושי VHDL ו Verilog של רכיבים ומאפשרת למשתמש לשלבם בתהליך כתיבת הקוד )למשל שימוש ב carry lookahead עבור פעולת סיכום מסוימת או מימושי זכרונות FIFO מסוגים שונים(. כדי שהכלים ימצאו את כל היחידות הדרושות יש לציין באיזה ספריות להשתמש. זה נעשה על ידי הוספת השורות הבאות בתחילת קובץ ה :VHDL library IEEE,DWARE,DW01,DW02,DW03; use IEEE.std_logic_1164.all; use ieee.std_logic_arith.all; use DW01.DW01_components.all; use DW02.DW02_components.all; use DW03.DW03_components.all; ניתן להשתמש ב DW במספר שיטות: א. inference בדרך זאת קוראים לפונקציה שברצוננו להשתמש כגון כפל כפי שמופיע בדוגמא הבאה: 1 library IEEE,DWARE,DW01,DW02; 2 use IEEE.std_logic_1164.all; 3 use ieee.std_logic_arith.all; 4 use DW01.DW01_components.all; 5 use DW02.DW02_components.all; 6 7 entity mymult is 8 port ( 9 a, b : in std_logic_vector(15 downto 0); 10 CLK : in std_logic; 11 product : out std_logic_vector(31 downto 0)); 12 end mymult; 13 14 architecture arc_mult of mymult is 15 16 begin 17 18 product <= a * b; 19 product <= std_logic_vector(dwf_mult_4_s(signed(a),signed(b),clk)); 20 21 end arc_mult; שים לב ששורה 21 גורמת לשימוש במכפל מצונר בעל 6 דרגות. ניתן היה גם להשתמש בקריאה כפי שמופיעה בשורה 21 )שנמצא ב,)comment במקרה הזה ה DW היה משתמש במכפל מקבילי. ב. Instantiation בשיטה זאת משתמשים בתיאור מבני של ארכיטקטורה ופשוט מציבים בלוקים של ה.DW דוגמא : library IEEE,DWARE,DW01; 2 use IEEE.std_logic_1164.all; 3 use DW01.DW01_components.all; 4 use DWARE.DWpackages.all; 5 6 entity DW01_add_ci_co_test is 7 port ( 8 a, b : in std_logic_vector(31 downto 0); 9 cin : in std_logic; 10 sum : out std_logic_vector(31 downto 0); 11 cout : out std_logic); 12 end DW01_add_ci_co_test; 9
13 14 architecture inst of DW01_add_ci_co_test is 15 16 begin 17 18 U1 : DW01_add 19 generic map ( width => 32 ) 20 port map (a, b, cin, sum, cout ) ; 21 22 end inst; 21 הערה : משפט ה generic map המסכם. שבשורה בקוד הנ"ל מאפשר למשתמש לקבוע את רוחב ג. Set_implementation משתמשים בדך זאת מתוך ה Design vision בעזרת הפקודה,set_implementation לדוגמא: set_implementation type U1 type מציין את סוג המעגל הדרוש ( cla או clf למשל עבור מסכם( ו U1 מציין עבור איזה יחידה בסכמה. חשוב : להמשך העבודה דרוש קובץ verilog של המעגל המסונתז. ניתן ליצור את הקובץ ב. verilog ובחירת פורמת File Save as בעזרת Design Vision שילוב RAM בתכנון בסינתזה אם התכנון מכיל זכרון,RAM יש לקרוא את קובץ ה VHDL ל Design Vision כפי שהוסבר, אבל אין לקרוא את הקובץ שמכיל את תיאור ה RAM עצמו. כלומר, קוראים את הרמה שמכילה את התיאור המבני של ה RAM בלבד. לפני ביצוע Design Compile Design ולאחר ביצוע ה Elaborate לתכנון, סמן את תא ה,RAM הקש מקש ימני ו properties. בשורה של don't touch סמן.true כעת הזכרון לא יעבור סינתזה. בצע סינתזה כפי שהוסבר ושמור את התכנון לקובץ.Verilog יש לערוך את קובץ ה Verilog ולהוסיף )בסוף הקובץ( תיאור ריק של ה,RAM לדוגמא: module dpram1024x16 ( CSA, CSB, NRSTA, NRSTB, ENA, ENB, RDA, RDB, WRA, WRB, ADA, ADB, DIA, DIB, DOA, DOB ;) input CSA ; input CSB ; input NRSTA ; input NRSTB ; input ENA ; input ENB ; input RDA ; input RDB ; input WRA ; input WRB ; input [9:0] ADA ; input [9:0] ADB ; input [15:0] DIA ; input [15:0] DIB ; output [15:0] DOA ; output [15:0] DOB ; endmodule 11
יצירת קובץ )Standard Delay Format( SDF קובץ ה sdf מכיל נתוני השהיה של התכנון המסונתז. קיומם של שערים וקווים )חוטים( "פיסיקליים" בתכנון המסונתז גורם להשהיות. קובץ ה sdf מכיל נתוני השהיות אלו ובעזרתו ניתן לבצע סימולציות דיגיטליות )באמצעות )NCSIM,VCS ואנליזות ( Prime Design Vision, )Time מדויקות יותר ותואמות למציאות הפיסיקלית של התכנון. בחר ביחידה העליונה ורשום ב :command window write_sdf your_design_name.sdf 1. סימולציה של מעגל מסונתז ושימוש בקבצי SDF סימולציה של מעגל מסונתז שונה מסימולציה רגילה משום שהיא מתחשבת בהשהיותיהם של השערים והקווים )באמצעות קובץ ה sdf ( ולכן סימולציה מסוג זה מציגה גם השהיות. וודא ששרוה זאת קיימת בקובץ.cshrc שלך: source /hm/iit/synopsys/source_synopsys01lnx כדי לבצע סימולציה כזאת, יש לבצע את הפעולות הבאות: א. ב. ג. ליצור תיאור VHDL של המעגל המסונתז. ב Design Vision בצע File Save As לשמור בפורמט הרצוי. בקוד ה VHDL המסונתז, עליך להוסיף את השורות הבאות לפני כל :entity library FS120; use FS120.TSL18FS120_COMPONENTS.all; את השלב הבא ניתן לעשות בשתי דרכים, בדרך הראשונה יש להוסיף קונפיגורציה בצורה הבאה: configuration CFG of DESIGN is for SYN_BEH end for; end CFG; כאשר Design הוא שם התכנון ו SYN_BEH הוא שם הארכיטקטורה, ויש לבצע את פקודת ה.CFG להלן על הקונפיגורציה vcs top_entity במקום על הקונפיגורציה. בצע את הפקודות הבאות: דרך שנייה על ידי ביצוע פקודת vcs להלן על ה vlogan vlog_files_names vhdlan vhdl_files_names vcs debug configuration_name or top_entity instead simv sdf testbench_entity_name/design_portmap_name:sdf_file.sdf gui יוצר קובץ כמו כן mux2_mapped.vhdl בוצע סינתוז לקובץ MUX2 דוגמא עבור תכנון של שם,MUX2_TB בשם top_entity מכיל ה Testbench קובץ.mux2.sdf הארכיטקטורה בקובץ זה הוא MUX2_TB_arch ושם האינסטנס map) (port של MUX2 הוא,MUX2_PM לכן יתבצע: vhdlan mux2_mapped.vhdl testbench.vhdl vcs debug MUX2_TB simv sdf MUX2_TB/MUX2_PM:mux2.sdf gui אם הפקודות מתבצעות בהצלחה, ניתן להריץ סימולציה כפי שעשית על הקוד ההתנהגותי. חשוב לציין שמתבצעת כאן סימולציה ברמת השערים הלוגיים וההשהיות האמיתיות נלקחות בחשבון. 11